#define _POSIX_C_SOURCE 200809L  // 添加宏定义以启用屏障功能
#include <stdio.h>
#include <pthread.h>

#define NUM_THREADS 4
pthread_barrier_t barrier;

void* thread_func(void* arg) {
    int id = *(int*)arg;
    printf("线程 %d 开始执行\n", id);
    
    // 模拟一些工作
    for (int i = 0; i < 1000000; i++);
    
    printf("线程 %d 到达屏障\n", id);
    int ret = pthread_barrier_wait(&barrier);
    
    if (ret == PTHREAD_BARRIER_SERIAL_THREAD) {
        printf("线程 %d 是最后一个到达的线程，执行后续操作\n", id);
    }
    
    printf("线程 %d 继续执行后续任务\n", id);
    pthread_exit(NULL);
}

int main() {
    pthread_t threads[NUM_THREADS];
    int ids[NUM_THREADS];
    
    // 初始化屏障，等待 NUM_THREADS 个线程
    pthread_barrier_init(&barrier, NULL, NUM_THREADS);
    
    // 创建线程
    for (int i = 0; i < NUM_THREADS; i++) {
        ids[i] = i;
        pthread_create(&threads[i], NULL, thread_func, &ids[i]);
    }
    
    // 等待所有线程完成
    for (int i = 0; i < NUM_THREADS; i++) {
        pthread_join(threads[i], NULL);
    }
    
    // 销毁屏障
    pthread_barrier_destroy(&barrier);
    
    return 0;
}